package net.xinqushi.design.bridge;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 桥接模式  ， 抽象定义 和 具体实现分离 。 定义两个不同的类，进行对接。
 * 例子： JDBC 源码 java.sql.Connection ,java.sql.PreparedStatement
 *  需要看一下源代码，JDBC如何实现 接口与实现相分离
 *  桥接模式遵循了里氏替换原则和依赖倒置原则，最终实现了开闭原则，对修改关闭，对扩展开放
 */
public class Bridge {

    private static Connection getConn() {
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/samp_db";
        String username = "root";
        String password = "";
        Connection conn = null;
        try {
            Class.forName(driver); //classLoader,加载对应驱动
            conn = (Connection) DriverManager.getConnection(url, username, password);
            conn.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }

    private static Product getProduct(){
        //淘宝方，加入我方jar包。实现自己的业务
        try {
            Class.forName("net.xinqushi.design.bridge.TaoBaoProduct");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        new ProductBridge().sell();
        new ProductBridge().pay();

        //ProductBridge
        return null;
    }

    public static void main(String[] args) {
        getProduct();
    }

}
